﻿using System;
using System.Collections.Generic;
using System.Drawing;
using System.Text;

namespace MapControl.Misc
{
    public abstract class SquareCoord
    {
        public RectangleF BorderSquare;//hình chữ nhật của nguyên square
        public int NumOfColumns; //số column đối với tọa độ ô vuông
        public int NumOfRows; // số row đối với tọa độ ô vuông
        public float Width; //kích thước dX cơ bản của một ô
        public float Height; //kích thước dY cơ bản của một ô

        /// <summary>
        /// Tọa độ ô vuông cha
        /// </summary>
        public SquareCoord parentSquareCoord;

        /// <summary>
        /// Thông tin tọa độ ô vuông hiện tại
        /// </summary>
        public RectangleF currentSquare;

        //Mảng 2 chiều lưu các index của bigsquare trong tọa độ 9x9
        private string[] _bigSquareArray;
        public string[] BigSquareArray
        {
            get
            {
                return _bigSquareArray;
            }
            set { _bigSquareArray = value; }
        }

        //Mảng 2 chiều lưu các index của bigsquare trong tọa độ 9x9
        private int[][] _mediumSquareArray;
        public int[][] MediumSquareArray
        {
            get
            {
                return _mediumSquareArray;
            }
            set { _mediumSquareArray = value; }
        }

        public void Init()
        {
            //Khởi tạo giá trị mảng tọa độ ô vuông vừa và tưởng tượng
            _mediumSquareArray = new int[3][];
            for (int i = 0; i < 3; i++)
                _mediumSquareArray[i] = new int[3];

            // 1 | 2 | 3
            //-----------
            // 8 | 9 | 4
            //-----------
            // 7 | 6 | 5
            _mediumSquareArray[0][0] = 1;
            _mediumSquareArray[1][0] = 2;
            _mediumSquareArray[2][0] = 3;
            _mediumSquareArray[0][1] = 8;
            _mediumSquareArray[1][1] = 9;
            _mediumSquareArray[2][1] = 4;
            _mediumSquareArray[0][2] = 7;
            _mediumSquareArray[1][2] = 6;
            _mediumSquareArray[2][2] = 5;
        }

        public SquareCoord(RectangleF rect, int colNum, int rowNum)
        {
            BorderSquare = rect;
            NumOfColumns = colNum;
            NumOfRows = rowNum;
            Width = BorderSquare.Width / NumOfColumns;
            Height = BorderSquare.Height / NumOfRows;

           Init();
        }

        public SquareCoord(RectangleF rect, int colNum, int rowNum, SquareCoord parent)
        {
            parentSquareCoord = parent;
            BorderSquare = rect;
            NumOfColumns = colNum;
            NumOfRows = rowNum;
            Width = BorderSquare.Width / NumOfColumns;
            Height = BorderSquare.Height / NumOfRows;
            Init();
        }

        /// <summary>
        /// Draw object
        /// </summary>
        /// <param name="g"></param>
        public virtual void Draw(Graphics g, float width)
        {

        }

        public virtual string GetCoord(PointF p)
        {
            return "";
        }

    }
}
